package com.xijia;

/**
 * 单列模式(懒汉式 + synchronized 锁机制)
 * @author wangsong
 * @mail 1720696548@qq.com
 * @date 2020/9/5 0005 9:58
 * @version 1.0.0
 */
public class Singleton02 {

    private static Singleton02 singleton02;

    private Singleton02() {
    }

    /**
     * 初始化 singleton02， 改方式避免了案例一 计数器重复初始化导致结果错误的问题，但存在一定的缺陷
     * 缺陷：
     * 初始化singleton02 无缺陷
     * 但 获取singleton02 数据时出现缺陷， 当我们获取singleton02时，两个线程同时获取singleton02时，必须排队获取singleton02，这显然是会严重影响性能的
     * @return
     */
    public static synchronized Singleton02 getInstance() {
        if (singleton02 == null) {
            singleton02 = new Singleton02();
        }
        return singleton02;
    }

    public static void main(String[] args) {
        // 初始化singleton02
        Singleton02 instance1 = Singleton02.getInstance();
        // 直接获取，不初始化
        Singleton02 instance2 = Singleton02.getInstance();
        System.out.println(instance1 == instance2);
    }
}
